﻿using System;
using System.Collections.Generic;
using System.Xml;
using Ro.Common.RoArgs;

namespace Ro.Common.RoInterface.UserType
{
    /// <summary>
    /// 配置信息中的List项目
    /// <para>
    /// Lists项目使用需求
    /// </para>
    /// 1.Lists是迭代测试时使用，在迭代测试前，会载入Lists下的各个项目
    /// <para>
    /// 2.按照载入的items项， 替换剩余步骤中的对应的参数值
    /// </para>
    /// </summary>
    public class ConfLists
    {
        /// <summary>
        /// 整个Lists的ID
        /// </summary>
        public string ListId { get; set; }


        /// <summary>
        /// list的值，以队列的形式保存
        /// </summary>
        public Queue<string> ListItem { get; set; }
    }

    /// <summary>
    /// 配置信息中的Macros(宏)
    /// <para>
    /// 宏项目使用需求
    /// </para>
    /// 宏的步骤允许在tests中被调用，用于在多个testcase中相同步骤替换为一个Macro被调取使用
    /// 也允许宏作为一个单独的步骤被调用
    /// <remarks>
    /// 无论何种方式被调用，对其使用的Tcc文件都必须被引用
    /// </remarks>
    /// </summary>
    public class ConfMacros
    {
        /// <summary>
        /// 整个Macro的ID
        /// </summary>
        public string MacroId { get; set; }

        /// <summary>
        /// Macro中的具体步骤
        /// </summary>
        public XmlNode MacroSteps { get; set; }
    }

    /// <summary>
    /// Pro版本的对外输出到Gui界面
    /// </summary>
    public class ProOutToGui
    {
        /// <summary>
        /// 编号
        /// </summary>
        public string Id { get; set; }

        /// <summary>
        /// 用例名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 步骤名称
        /// </summary>
        public string StepsName { get; set; }

        /// <summary>
        /// 控件Id
        /// </summary>
        public string ControlId { get; set; }

        /// <summary>
        /// 结果
        /// </summary>
        public string Result { get; set; }


        /// <summary>
        /// 额外追加信息
        /// </summary>
        public string ExtraInfo { get; set; }


        /// <summary>
        /// 时间戳
        /// </summary>
        public string TimeFlag { get; set; }


        /// <summary>
        /// 详情
        /// </summary>
        public string Details { get; set; }
    }

    /// <summary>
    /// 配置信息中的语言项
    /// <para>
    /// 语言项验证需求
    /// 1.在语言项中，只要存在一个值配置成功，即可表示语言项目正确
    /// </para>
    /// </summary>
    public class ConfLangs
    {
        /// <summary>
        /// 整个Lang的ID
        /// </summary>
        public string LangId { get; set; }


        /// <summary>
        /// Langs的值，以List形式保存
        /// </summary>
        public List<string> LangValue { get; set; }
    }

    /// <summary>
    /// Gui中的Tcc文件
    /// usetype中总的定义
    /// </summary>
    public class GuiTccInfo
    {
        /// <summary>
        /// 配置信息中存储的Properties信息
        /// </summary>
        public List<Property> GuiProperties { get; set; }

        /// <summary>
        /// 配置信息中存储的Languages信息
        /// </summary>
        public List<ConfLangs> GuiConfLangs { get; set; }

        /// <summary>
        /// 配置信息中存储的Lists信息
        /// </summary>
        public List<ConfLists> GuiConfLists { get; set; }

        /// <summary>
        /// 配置信息中存储的Macros信息
        /// </summary>
        public List<ConfMacros> GuiMacros { get; set; }
    }

    /// <summary>
    /// Gui程序启动使用的参数值
    /// </summary>
    public class GuiTestArgsInfo : RoTestArgsInfo
    {
        /// <summary>
        /// Tcs勾选的文件夹路径
        /// </summary>
        public string TcsFolderPath { get; set; }


        /// <summary>
        /// Tcc勾选的文件夹路径
        /// </summary>
        public string TccFolderPath { get; set; }
    }
}
